package cn.edu.seig.springks.service.Impl;

import cn.edu.seig.springks.dao.cartMapper;
import cn.edu.seig.springks.pojo.cart;
import cn.edu.seig.springks.pojo.order;
import cn.edu.seig.springks.service.cartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 实现购物车服务接口
 */
@Service
public class cartServiceImpl implements cartService {
    // 自动注入购物车数据访问对象
    @Autowired
    cartMapper cartMapper;

    /**
     * 获取用户的购物车列表
     *
     * @param u_id 用户ID
     * @return 购物车列表
     */
    @Override
    public List<cart> getCartList(int u_id) {
        return cartMapper.selectCart(u_id);
    }

    /**
     * 删除购物车中的商品
     *
     * @param cart 购物车对象，包含要删除的商品信息
     * @return 删除结果，1表示成功，其他表示失败
     */
    @Override
    public int deleteCart(cart cart) {
        return cartMapper.deleteCart(cart);
    }

    /**
     * 插入订单并删除购物车中的商品
     * 此方法确保所有订单都成功插入，否则抛出异常进行事务回滚
     *
     * @param orders 订单列表，包含要插入的订单信息
     * @param index 购物车列表，包含要删除的商品信息
     * @param u_id 用户ID，用于确认删除操作的用户
     * @return 成功插入的订单数量
     * @throws RuntimeException 如果插入和删除的数量不一致，则抛出异常
     */
    @Transactional
    @Override
    public int InsertOrders(List<order> orders, List<cart> index, int u_id) {
        int inserted = cartMapper.InsertOrders(orders);
        for (cart cart : index) {
            cart.setU_id(u_id);
            int deleted = cartMapper.deleteCart(cart);
        }
        if (inserted == orders.size()) {
            return inserted;
        }
        throw new RuntimeException("插入和删除数量不同,出现异常,开始回滚");
    }
}
